Autogenerated HTML docs for v1.7.3.2-245-g03276
diff --git a/technical/api-index.html b/technical/api-index.html index eb119f8..93d6862 100644 --- a/technical/api-index.html +++ b/technical/api-index.html
@@ -3,7 +3,8 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="generator" content="AsciiDoc 8.2.5" /> +<meta name="generator" content="AsciiDoc 8.4.5" /> +<title>GIT API Documents</title> <style type="text/css"> /* Debug borders */ p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 { @@ -26,10 +27,12 @@ em { font-style: italic; + color: navy; } strong { font-weight: bold; + color: #083194; } tt { @@ -71,6 +74,10 @@ margin-bottom: 0.5em; } +ul, ol, li > p { + margin-top: 0; +} + pre { padding: 0; margin: 0; @@ -84,7 +91,7 @@ } span#email { } -span#revision { +span#revnumber, span#revdate, span#revremark { font-family: sans-serif; } @@ -104,11 +111,13 @@ padding-bottom: 0.5em; } -div#preamble, +div#preamble { + margin-top: 1.5em; + margin-bottom: 1.5em; +} div.tableblock, div.imageblock, div.exampleblock, div.verseblock, div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, div.admonitionblock { - margin-right: 10%; margin-top: 1.5em; margin-bottom: 1.5em; } @@ -123,6 +132,7 @@ /* Block element titles. */ div.title, caption.title { + color: #527bbd; font-family: sans-serif; font-weight: bold; text-align: left; @@ -149,22 +159,33 @@ padding: 0.5em; } -div.listingblock { - margin-right: 0%; -} div.listingblock > div.content { border: 1px solid silver; background: #f4f4f4; padding: 0.5em; } -div.quoteblock > div.content { +div.quoteblock { padding-left: 2.0em; + margin-right: 10%; } - -div.attribution { +div.quoteblock > div.attribution { + padding-top: 0.5em; text-align: right; } + +div.verseblock { + padding-left: 2.0em; + margin-right: 10%; +} +div.verseblock > div.content { + white-space: pre; +} +div.verseblock > div.attribution { + padding-top: 0.75em; + text-align: left; +} +/* DEPRECATED: Pre version 8.2.7 verse style literal block. */ div.verseblock + div.attribution { text-align: left; } @@ -187,13 +208,9 @@ padding: 0.5em; } -div.verseblock div.content { - white-space: pre; -} - div.imageblock div.content { padding-left: 0; } -div.imageblock img { border: 1px solid silver; } span.image img { border-style: none; } +a.image:visited { color: white; } dl { margin-top: 0.8em; @@ -202,18 +219,38 @@ dt { margin-top: 0.5em; margin-bottom: 0; - font-style: italic; + font-style: normal; + color: navy; } dd > *:first-child { - margin-top: 0; + margin-top: 0.1em; } ul, ol { list-style-position: outside; } -div.olist2 ol { +ol.arabic { + list-style-type: decimal; +} +ol.loweralpha { list-style-type: lower-alpha; } +ol.upperalpha { + list-style-type: upper-alpha; +} +ol.lowerroman { + list-style-type: lower-roman; +} +ol.upperroman { + list-style-type: upper-roman; +} + +div.compact ul, div.compact ol, +div.compact p, div.compact p, +div.compact div, div.compact div { + margin-top: 0.1em; + margin-bottom: 0.1em; +} div.tableblock > table { border: 3px solid #527bbd; @@ -225,22 +262,53 @@ tfoot { font-weight: bold; } +td > div.verse { + white-space: pre; +} +p.table { + margin-top: 0; +} +/* Because the table frame attribute is overriden by CSS in most browsers. */ +div.tableblock > table[frame="void"] { + border-style: none; +} +div.tableblock > table[frame="hsides"] { + border-left-style: none; + border-right-style: none; +} +div.tableblock > table[frame="vsides"] { + border-top-style: none; + border-bottom-style: none; +} -div.hlist { + +div.hdlist { margin-top: 0.8em; margin-bottom: 0.8em; } -div.hlist td { - padding-bottom: 5px; +div.hdlist tr { + padding-bottom: 15px; } -td.hlist1 { +dt.hdlist1.strong, td.hdlist1.strong { + font-weight: bold; +} +td.hdlist1 { vertical-align: top; - font-style: italic; + font-style: normal; padding-right: 0.8em; + color: navy; } -td.hlist2 { +td.hdlist2 { vertical-align: top; } +div.hdlist.compact tr { + margin: 0; + padding-bottom: 0; +} + +.comment { + background: yellow; +} @media print { div#footer-badges { display: none; } @@ -279,6 +347,7 @@ padding: 0.5em; } div.sidebar-title, div.image-title { + color: #527bbd; font-family: sans-serif; font-weight: bold; margin-top: 0.0em; @@ -291,8 +360,17 @@ padding: 0.5em; } -div.quoteblock-content { - padding-left: 2.0em; +div.quoteblock-attribution { + padding-top: 0.5em; + text-align: right; +} + +div.verseblock-content { + white-space: pre; +} +div.verseblock-attribution { + padding-top: 0.75em; + text-align: left; } div.exampleblock-content { @@ -303,7 +381,6 @@ /* IE6 sets dynamically generated links as visited. */ div#toc a:visited { color: blue; } </style> -<title>GIT API Documents</title> </head> <body> <div id="header"> @@ -311,9 +388,9 @@ </div> <div id="preamble"> <div class="sectionbody"> -<div class="para"><p>GIT has grown a set of internal API over time. This collection +<div class="paragraph"><p>GIT has grown a set of internal API over time. This collection documents them.</p></div> -<div class="ilist"><ul> +<div class="ulist"><ul> <li> <p> <a href="api-allocation-growing.html">allocation growing API</a> @@ -411,6 +488,11 @@ </li> <li> <p> +<a href="api-sigchain.html">sigchain API</a> +</p> +</li> +<li> +<p> <a href="api-strbuf.html">strbuf API</a> </p> </li> @@ -430,12 +512,12 @@ </p> </li> </ul></div> -<div class="para"><p>2007-11-24</p></div> +<div class="paragraph"><p>2007-11-24</p></div> </div> </div> <div id="footer"> <div id="footer-text"> -Last updated 2010-09-18 23:57:18 UTC +Last updated 2010-11-18 00:52:24 UTC </div> </div> </body> diff --git a/technical/api-index.txt b/technical/api-index.txt index 9db48c2..62da0df 100644 --- a/technical/api-index.txt +++ b/technical/api-index.txt
@@ -26,6 +26,7 @@ * link:api-revision-walking.html[revision walking API] * link:api-run-command.html[run-command API] * link:api-setup.html[setup API] +* link:api-sigchain.html[sigchain API] * link:api-strbuf.html[strbuf API] * link:api-string-list.html[string-list API] * link:api-tree-walking.html[tree walking API]
diff --git a/technical/api-sigchain.html b/technical/api-sigchain.html new file mode 100644 index 0000000..2f70672 --- /dev/null +++ b/technical/api-sigchain.html
@@ -0,0 +1,442 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<meta name="generator" content="AsciiDoc 8.4.5" /> +<title>sigchain API</title> +<style type="text/css"> +/* Debug borders */ +p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 { +/* + border: 1px solid red; +*/ +} + +body { + margin: 1em 5% 1em 5%; +} + +a { + color: blue; + text-decoration: underline; +} +a:visited { + color: fuchsia; +} + +em { + font-style: italic; + color: navy; +} + +strong { + font-weight: bold; + color: #083194; +} + +tt { + color: navy; +} + +h1, h2, h3, h4, h5, h6 { + color: #527bbd; + font-family: sans-serif; + margin-top: 1.2em; + margin-bottom: 0.5em; + line-height: 1.3; +} + +h1, h2, h3 { + border-bottom: 2px solid silver; +} +h2 { + padding-top: 0.5em; +} +h3 { + float: left; +} +h3 + * { + clear: left; +} + +div.sectionbody { + font-family: serif; + margin-left: 0; +} + +hr { + border: 1px solid silver; +} + +p { + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +ul, ol, li > p { + margin-top: 0; +} + +pre { + padding: 0; + margin: 0; +} + +span#author { + color: #527bbd; + font-family: sans-serif; + font-weight: bold; + font-size: 1.1em; +} +span#email { +} +span#revnumber, span#revdate, span#revremark { + font-family: sans-serif; +} + +div#footer { + font-family: sans-serif; + font-size: small; + border-top: 2px solid silver; + padding-top: 0.5em; + margin-top: 4.0em; +} +div#footer-text { + float: left; + padding-bottom: 0.5em; +} +div#footer-badges { + float: right; + padding-bottom: 0.5em; +} + +div#preamble { + margin-top: 1.5em; + margin-bottom: 1.5em; +} +div.tableblock, div.imageblock, div.exampleblock, div.verseblock, +div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, +div.admonitionblock { + margin-top: 1.5em; + margin-bottom: 1.5em; +} +div.admonitionblock { + margin-top: 2.5em; + margin-bottom: 2.5em; +} + +div.content { /* Block element content. */ + padding: 0; +} + +/* Block element titles. */ +div.title, caption.title { + color: #527bbd; + font-family: sans-serif; + font-weight: bold; + text-align: left; + margin-top: 1.0em; + margin-bottom: 0.5em; +} +div.title + * { + margin-top: 0; +} + +td div.title:first-child { + margin-top: 0.0em; +} +div.content div.title:first-child { + margin-top: 0.0em; +} +div.content + div.title { + margin-top: 0.0em; +} + +div.sidebarblock > div.content { + background: #ffffee; + border: 1px solid silver; + padding: 0.5em; +} + +div.listingblock > div.content { + border: 1px solid silver; + background: #f4f4f4; + padding: 0.5em; +} + +div.quoteblock { + padding-left: 2.0em; + margin-right: 10%; +} +div.quoteblock > div.attribution { + padding-top: 0.5em; + text-align: right; +} + +div.verseblock { + padding-left: 2.0em; + margin-right: 10%; +} +div.verseblock > div.content { + white-space: pre; +} +div.verseblock > div.attribution { + padding-top: 0.75em; + text-align: left; +} +/* DEPRECATED: Pre version 8.2.7 verse style literal block. */ +div.verseblock + div.attribution { + text-align: left; +} + +div.admonitionblock .icon { + vertical-align: top; + font-size: 1.1em; + font-weight: bold; + text-decoration: underline; + color: #527bbd; + padding-right: 0.5em; +} +div.admonitionblock td.content { + padding-left: 0.5em; + border-left: 2px solid silver; +} + +div.exampleblock > div.content { + border-left: 2px solid silver; + padding: 0.5em; +} + +div.imageblock div.content { padding-left: 0; } +span.image img { border-style: none; } +a.image:visited { color: white; } + +dl { + margin-top: 0.8em; + margin-bottom: 0.8em; +} +dt { + margin-top: 0.5em; + margin-bottom: 0; + font-style: normal; + color: navy; +} +dd > *:first-child { + margin-top: 0.1em; +} + +ul, ol { + list-style-position: outside; +} +ol.arabic { + list-style-type: decimal; +} +ol.loweralpha { + list-style-type: lower-alpha; +} +ol.upperalpha { + list-style-type: upper-alpha; +} +ol.lowerroman { + list-style-type: lower-roman; +} +ol.upperroman { + list-style-type: upper-roman; +} + +div.compact ul, div.compact ol, +div.compact p, div.compact p, +div.compact div, div.compact div { + margin-top: 0.1em; + margin-bottom: 0.1em; +} + +div.tableblock > table { + border: 3px solid #527bbd; +} +thead { + font-family: sans-serif; + font-weight: bold; +} +tfoot { + font-weight: bold; +} +td > div.verse { + white-space: pre; +} +p.table { + margin-top: 0; +} +/* Because the table frame attribute is overriden by CSS in most browsers. */ +div.tableblock > table[frame="void"] { + border-style: none; +} +div.tableblock > table[frame="hsides"] { + border-left-style: none; + border-right-style: none; +} +div.tableblock > table[frame="vsides"] { + border-top-style: none; + border-bottom-style: none; +} + + +div.hdlist { + margin-top: 0.8em; + margin-bottom: 0.8em; +} +div.hdlist tr { + padding-bottom: 15px; +} +dt.hdlist1.strong, td.hdlist1.strong { + font-weight: bold; +} +td.hdlist1 { + vertical-align: top; + font-style: normal; + padding-right: 0.8em; + color: navy; +} +td.hdlist2 { + vertical-align: top; +} +div.hdlist.compact tr { + margin: 0; + padding-bottom: 0; +} + +.comment { + background: yellow; +} + +@media print { + div#footer-badges { display: none; } +} + +div#toctitle { + color: #527bbd; + font-family: sans-serif; + font-size: 1.1em; + font-weight: bold; + margin-top: 1.0em; + margin-bottom: 0.1em; +} + +div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 { + margin-top: 0; + margin-bottom: 0; +} +div.toclevel2 { + margin-left: 2em; + font-size: 0.9em; +} +div.toclevel3 { + margin-left: 4em; + font-size: 0.9em; +} +div.toclevel4 { + margin-left: 6em; + font-size: 0.9em; +} +/* Workarounds for IE6's broken and incomplete CSS2. */ + +div.sidebar-content { + background: #ffffee; + border: 1px solid silver; + padding: 0.5em; +} +div.sidebar-title, div.image-title { + color: #527bbd; + font-family: sans-serif; + font-weight: bold; + margin-top: 0.0em; + margin-bottom: 0.5em; +} + +div.listingblock div.content { + border: 1px solid silver; + background: #f4f4f4; + padding: 0.5em; +} + +div.quoteblock-attribution { + padding-top: 0.5em; + text-align: right; +} + +div.verseblock-content { + white-space: pre; +} +div.verseblock-attribution { + padding-top: 0.75em; + text-align: left; +} + +div.exampleblock-content { + border-left: 2px solid silver; + padding-left: 0.5em; +} + +/* IE6 sets dynamically generated links as visited. */ +div#toc a:visited { color: blue; } +</style> +</head> +<body> +<div id="header"> +<h1>sigchain API</h1> +</div> +<div id="preamble"> +<div class="sectionbody"> +<div class="paragraph"><p>Code often wants to set a signal handler to clean up temporary files or +other work-in-progress when we die unexpectedly. For multiple pieces of +code to do this without conflicting, each piece of code must remember +the old value of the handler and restore it either when:</p></div> +<div class="olist arabic"><ol class="arabic"> +<li> +<p> +The work-in-progress is finished, and the handler is no longer + necessary. The handler should revert to the original behavior + (either another handler, SIG_DFL, or SIG_IGN). +</p> +</li> +<li> +<p> +The signal is received. We should then do our cleanup, then chain + to the next handler (or die if it is SIG_DFL). +</p> +</li> +</ol></div> +<div class="paragraph"><p>Sigchain is a tiny library for keeping a stack of handlers. Your handler +and installation code should look something like:</p></div> +<div class="listingblock"> +<div class="content"> +<pre><tt> void clean_foo_on_signal(int sig) + { + clean_foo(); + sigchain_pop(sig); + raise(sig); + } + + void other_func() + { + sigchain_push_common(clean_foo_on_signal); + mess_up_foo(); + clean_foo(); + }</tt></pre> +</div></div> +<div class="paragraph"><p>Handlers are given the typdef of sigchain_fun. This is the same type +that is given to signal() or sigaction(). It is perfectly reasonable to +push SIG_DFL or SIG_IGN onto the stack.</p></div> +<div class="paragraph"><p>You can sigchain_push and sigchain_pop individual signals. For +convenience, sigchain_push_common will push the handler onto the stack +for many common signals.</p></div> +</div> +</div> +<div id="footer"> +<div id="footer-text"> +Last updated 2010-11-18 00:51:23 UTC +</div> +</div> +</body> +</html> diff --git a/technical/api-sigchain.txt b/technical/api-sigchain.txt new file mode 100644 index 0000000..535cdff --- /dev/null +++ b/technical/api-sigchain.txt
@@ -0,0 +1,41 @@ +sigchain API +============ + +Code often wants to set a signal handler to clean up temporary files or +other work-in-progress when we die unexpectedly. For multiple pieces of +code to do this without conflicting, each piece of code must remember +the old value of the handler and restore it either when: + + 1. The work-in-progress is finished, and the handler is no longer + necessary. The handler should revert to the original behavior + (either another handler, SIG_DFL, or SIG_IGN). + + 2. The signal is received. We should then do our cleanup, then chain + to the next handler (or die if it is SIG_DFL). + +Sigchain is a tiny library for keeping a stack of handlers. Your handler +and installation code should look something like: + +------------------------------------------ + void clean_foo_on_signal(int sig) + { + clean_foo(); + sigchain_pop(sig); + raise(sig); + } + + void other_func() + { + sigchain_push_common(clean_foo_on_signal); + mess_up_foo(); + clean_foo(); + } +------------------------------------------ + +Handlers are given the typdef of sigchain_fun. This is the same type +that is given to signal() or sigaction(). It is perfectly reasonable to +push SIG_DFL or SIG_IGN onto the stack. + +You can sigchain_push and sigchain_pop individual signals. For +convenience, sigchain_push_common will push the handler onto the stack +for many common signals.